package movilmax.sia_corp.action;

import java.util.LinkedList;
import java.util.Map;

import movilmax.sia_corp.model.DetalleTicket;
import movilmax.sia_corp.model.Ticket;
import movilmax.sia_corp.model.Usuario;

import apli.conectar.Conectar;
import basedatos.Fecha;
import basedatos.Resultado;

import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;

public class ReporteTickets extends ActionSupport{


	private static final long serialVersionUID = 5779949899304422616L;
	
	private LinkedList<Ticket> rpt_lista;
	LinkedList<DetalleTicket> lista_detTk;
	private DetalleTicket detalleT=new DetalleTicket();
	private String mes;
	private String anno;
	private String fechai;
	private String fechaf;
	private String departamento;
	private String tipoContrato;
	private String tipoTicket;
	private String detalleTipoTicket;
	private String statusTicket;
	private String cliente;
	private String codTicket;
	
	
	
	@SuppressWarnings("rawtypes")
	public String consultarTickets(){
		
		rpt_lista=new LinkedList<Ticket>();
		String SQL="",c1="",c2="",c3="",c4="",c5="",c6="",c7="";
		Map session = ActionContext.getContext().getSession();
    	Usuario USUARIO = (Usuario) session.get("ses_usuario");
		if(USUARIO==null){
			this.addActionError("La sesion del usuario ha caducado" ); 
			return ERROR;
		}
		Conectar BASE=new Conectar();
		if(!BASE.getMsg().equals("SI")){
			this.addActionError("No hay conexion al servidor");
			return ERROR;
		}
		
	/*-------------------------------------condiciones por filtro------------------------------------*/
		
		if( this.getFechai() !=null && this.getFechaf() !=null ){
			if (!this.getFechai().equals("") && !this.getFechaf().equals("") ){
				c1="and A.fecha BETWEEN '" + this.getFechai() + "' and  '" + this.getFechaf()+"'" ;
			}
		}
		if(!this.getDepartamento().equals("-1") ){
    		c2=" and A.responsable='" + this.getDepartamento() +"' " ;
    	}
		
		if(!this.getTipoContrato().equals("-1") ){
			c3="and C.tipo='" + this.getTipoContrato() +"' ";
    	}
		
		if(!this.getTipoTicket().equals("-1") ){
			c4=" and A.tipo='" + this.getTipoTicket() + "'  ";
    	}
		
		if(!this.getDetalleTipoTicket().equals("-1") ){
			c5= " and A.tipo_det='" + this.getDetalleTipoTicket() + "'  ";
    	}
		
		if(!this.getStatusTicket().equals("-1") ){
			c6= " and A.status='" + this.getStatusTicket() + "'  ";
    	}
		if(!this.getCliente().equals("") ){
			c7= " and W.nombres like '%" + this.getCliente() + "%' ";
    	}
		 
		/*-------------------------------------fin condiciones por filtro------------------------------------*/		
		SQL="select A.nro_ticket,W.nombres+' '+W.apellidos as clientex,W.identificacion, C.tipo,C.contrato,A.nro_ticket,A.fecha,A.hora,X.descripcion as tipo_tk,"+
			" Y.descripcion as det_tipo_tk,D2.descripcion as area,S.descripcion as stx, (a.fecha+X.tr) as fechavence,DATEDIFF(day,((a.fecha)+X.tr),GETDATE() ) num_diasv,"+ 
			" DATEDIFF(hour,((a.fecha+' '+a.hora)+X.trhrs),GETDATE() ) num_horas,X.tr,X.trhrs,(case when X.tr>0 then ( case when DATEDIFF(day,((a.fecha)+X.tr),GETDATE() ) >0  then ('VENCIDO HACE '+CAST( DATEDIFF(day,((a.fecha)+X.tr),GETDATE()) as varchar ) +' DIAS' )"+ 
			" when DATEDIFF(day,((a.fecha)+X.tr),GETDATE() ) =0  then ('VENCE HOY ')"+ 
			" when DATEDIFF(day,((a.fecha)+X.tr),GETDATE() ) <0  then ('VENCE EN '+CAST( ABS(DATEDIFF(day,((a.fecha)+X.tr),GETDATE() ) ) as varchar ) +' DIAS' )"+ 
			" end  ) Else ( case when DATEDIFF(hour,((a.fecha+' '+a.hora)+X.trhrs),GETDATE() ) >0 then ('VENCIDO HACE '+CAST( DATEDIFF(hour,((a.fecha+' '+a.hora)+X.trhrs),GETDATE()) as varchar ) +' HORAS' )"+ 
			" when DATEDIFF(hour,((a.fecha+' '+a.hora)+X.trhrs),GETDATE() ) =0 then ('VENCIDO')"+ 
			" when DATEDIFF(hour,((a.fecha+' '+a.hora)+X.trhrs),GETDATE() ) <0 then ('VENCE EN '+CAST( ABS(DATEDIFF(hour,((a.fecha+' '+a.hora)+X.trhrs),GETDATE() ) ) as varchar ) +' HORAS' )"+ 
			" end ) end ) as tiempo_des,A.codigo"+
			" from tickets A,tipos_ticket X,tipos_ticket_det Y,contratos C,clientes W,departamentos D2,status_tickets S"+
			" Where A.tipo = x.cod And A.tipo_det = y.cod and A.status=S.cod and A.responsable=D2.cod " + c1 + c2 + c3 + c4 + c5 + c6 + c7 +
			" and A.contrato=C.contrato and C.cliente=W.codigo Order By A.fecha DESC,A.hora DESC";
		//this.addActionMessage(SQL);
		Resultado RCS=BASE.getBaseDatos().consultar(SQL);
		Resultado RCS_= new Resultado();
		LinkedList<DetalleTicket> lista_detTk = new LinkedList<>();
		Fecha F = new Fecha();
		boolean x=false;
		  if(RCS.RP){
			  do{ 
				  Ticket ITM= new Ticket();
				  ITM.setCodigo(RCS.getInt("codigo"));
				  ITM.setNroTicket(RCS.getInt("nro_ticket"));
				  ITM.setCliente(RCS.getCadena("clientex"));
				  ITM.setIdentificacion(RCS.getCadena("identificacion"));
				  ITM.setTipoContrato(RCS.getCadena("tipo"));
				  ITM.setContrato(RCS.getCadena("contrato"));
				  ITM.setFecha(F.formateaFecha(RCS.getCadena("fecha"), true));
				  ITM.setHora(RCS.getCadena("hora"));
				  ITM.setTipo(RCS.getCadena("tipo_tk"));
				  ITM.setTipoDet(RCS.getCadena("det_tipo_tk"));
				  ITM.setArea(RCS.getCadena("area"));
				  ITM.setStatus(RCS.getCadena("stx"));
				  ITM.setVence(F.formateaFecha(RCS.getCadena("fechavence"), true));
				  ITM.setTiempo(RCS.getCadena("tiempo_des"));
				  
				  SQL="Select top 1 D.*,D2.descripcion as depx from detalle_tickets D,usuarios U,departamentos D2  where D.ticket='" + 
					   ITM.getCodigo() + "' and D.usuario=U.usuario and U.departamento=D2.cod order by item ASC";
				  RCS_=BASE.getBaseDatos().consultar(SQL);
				  if(RCS_.RP){
					  do{
						   detalleT=new DetalleTicket();
						   detalleT.setObsCliente(RCS_.getCadena("obs_cliente"));
						   detalleT.setObsOperador(RCS_.getCadena("obs_operador"));
						   detalleT.setFecha(F.formateaFecha(RCS_.getCadena("fecha"),true));
						   detalleT.setHora(RCS_.getCadena("hora"));
						   detalleT.setDepartamento(RCS_.getCadena("depx"));
						   detalleT.setUsuario(RCS_.getCadena("usuario"));
						   lista_detTk.add(detalleT);
					  }while(RCS_.sigItem());
				  }
				  ITM.setDetalleTicket(lista_detTk);
				  if(!RCS.getCadena("status").equals("0")){
					  x=(x ? false: true);
					  if(x)
					    ITM.setStylo("tabla_fil_normal1");
					  else
						ITM.setStylo("tabla_fil_normal2");  
				  }else{
					  ITM.setStylo("tabla_fil_anulado");
				  }
				  rpt_lista.add(ITM);
			  }while(RCS.sigItem()); 
		  }
		BASE.getBaseDatos().cerrarConexion();
		return SUCCESS;
	
	}
	
	public String consultarDetallesTicket(){
		
		Fecha F = new Fecha();
	  	detalleT=new DetalleTicket();
	  	Resultado RCS = new Resultado();
	  	lista_detTk= new LinkedList<>();
	  	boolean x=false;
	  	String SQL;
	  	Map<?, ?> session = ActionContext.getContext().getSession();
    	Usuario USUARIO = (Usuario) session.get("ses_usuario");
    	
    	
		if(USUARIO==null){
			this.addActionError("La sesion del usuario ha caducado" ); 
			return ERROR;
		}
		Conectar BASE=new Conectar();
		if(!BASE.getMsg().equals("SI")){
			this.addActionError("No hay conexion al servidor");
			return ERROR;
		}
		
		SQL="Select  D.*,D2.descripcion as depx from detalle_tickets D,usuarios U,departamentos D2  where D.ticket='" + 
		this.getCodTicket() + "' and D.usuario=U.usuario and U.departamento=D2.cod order by item ASC";
		RCS=BASE.getBaseDatos().consultar(SQL);
		  if(RCS.RP){
			  do{
				   detalleT=new DetalleTicket();
				   detalleT.setObsCliente(RCS.getCadena("obs_cliente"));
				   detalleT.setObsOperador(RCS.getCadena("obs_operador"));
				   detalleT.setFecha(F.formateaFecha(RCS.getCadena("fecha"),true));
				   detalleT.setHora(RCS.getCadena("hora"));
				   detalleT.setDepartamento(RCS.getCadena("depx"));
				   detalleT.setUsuario(RCS.getCadena("usuario"));
				   x=(x ? false: true);
					  if(x)
						  detalleT.setStylo("tabla_fil_normal1");
					  else
						  detalleT.setStylo("tabla_fil_normal2"); 
				   lista_detTk.add(detalleT);
			  }while(RCS.sigItem());
		  }
		  BASE.getBaseDatos().cerrarConexion();
		return SUCCESS;
	}
	

	
	
	
	/*---------------  GETTERS AND SETTERS  -----------------------*/

	public String getMes() {
		return mes;
	}

	public void setMes(String mes) {
		this.mes = mes;
	}

	public String getAnno() {
		return anno;
	}

	public void setAnno(String anno) {
		this.anno = anno;
	}

	public String getFechai() {
		return fechai;
	}

	public void setFechai(String fechai) {
		this.fechai = fechai;
	}

	public String getFechaf() {
		return fechaf;
	}

	public void setFechaf(String fechaf) {
		this.fechaf = fechaf;
	}

	public String getDepartamento() {
		return departamento;
	}

	public void setDepartamento(String departamento) {
		this.departamento = departamento;
	}

	public String getTipoContrato() {
		return tipoContrato;
	}

	public void setTipoContrato(String tipoContrato) {
		this.tipoContrato = tipoContrato;
	}

	public String getTipoTicket() {
		return tipoTicket;
	}

	public void setTipoTicket(String tipoTicket) {
		this.tipoTicket = tipoTicket;
	}

	public String getDetalleTipoTicket() {
		return detalleTipoTicket;
	}

	public void setDetalleTipoTicket(String detalleTipoTicket) {
		this.detalleTipoTicket = detalleTipoTicket;
	}

	public String getStatusTicket() {
		return statusTicket;
	}

	public void setStatusTicket(String statusTicket) {
		this.statusTicket = statusTicket;
	}

	public String getCliente() {
		return cliente;
	}

	public void setCliente(String cliente) {
		this.cliente = cliente;
	}

	public LinkedList<Ticket> getRpt_lista() {
		return rpt_lista;
	}

	public void setRpt_lista(LinkedList<Ticket> rpt_lista) {
		this.rpt_lista = rpt_lista;
	}

	public LinkedList<DetalleTicket> getLista_detTk() {
		return lista_detTk;
	}

	public void setLista_detTk(LinkedList<DetalleTicket> lista_detTk) {
		this.lista_detTk = lista_detTk;
	}

	public String getCodTicket() {
		return codTicket;
	}

	public void setCodTicket(String codTicket) {
		this.codTicket = codTicket;
	}

	

	
	
	
	
	
	

}
